#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>

//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//	struct ListNode* prve = NULL;
//	struct ListNode* cur = head;
//	while (cur)
//	{
//		if (cur->val == val)
//		{
//			struct ListNode* next = cur->next;
//			free(cur);
//			if (prve)
//				prve->next = next;
//			else
//				head = next;
//			cur = next;
//		}
//		else
//		{
//			prve = cur;
//			cur = cur->next;
//		}
//	}
//	return head;
//}


//
//struct ListNode* middleNode(struct ListNode* head)
//{
//    struct ListNode* slow = head, * fast = head;
//    while (fast && fast->next)
//    {
//        slow = slow->next;
//        fast = fast->next->next;
//    }
//    return slow;
//}


struct ListNode* FindKthToTail(struct ListNode* pListHead, int k)
{
    struct ListNode* slow = pListHead, * fast = pListHead;
    while (k--)
    {
        if (fast == NULL)
            return NULL;
        fast = fast->next;
    }
    while (fast)
    {
        slow = slow->next;
        fast = fast->next;
    }
    return slow;
}